Pythonista3でおみくじの結果を撮影した写真の片隅に表示するようにした
こんにちは。池田です。入社から1ヶ月が経ちましたが、四半期報告会やAWS事業部合宿などもあり実にあっという間の1ヶ月でした。
先日、いつものようにクラスメソッドのおみくじで運試しをしていたところ、以下の組み合わせで結果が表示されているのではないかと推測しました(実装内容について作者に伺ったわけではないので違うかもしれません)。
1:大吉から大凶まで6種類の運勢がある
2:開運ほげほげ(開運AWSなど)は10種類ある
3:その後のコメントは運勢に応じて(大吉ならハッピーな内容だが小吉なら注意喚起も含むなど)各運勢に応じたものがそれぞれ3〜6パターン程度ある
これらをPythonista3でTwitterへ投稿するための方法として考えたのが以下となります。
1: 6パターンあるunseiをrandom関数を用いて選定(できれば大吉と大凶は選定率を低めに)する
2:10パターンあるkaiunもrandom関数を用いて選定(こちらは均等な確率で)する
3:unseiに応じて指定されたcommentの中からrandom関数を用いて選定(こちらも均等な確率で)する
4:1で選定されたunseiに対応しためそ子さん画像を決定する
5:上記1〜3で選定したものを連結し、4のめそ子さん画像とともに投稿する
この方法であれば、スクリプト中にTwitterAPIKeyなどを記載しておくことで期待した動作となるであろうと推測しています。
が、これは個人で運用しているHubotで処理させたいという欲が出てきました。そこでHubotについて改めて確認したところ、Hubotでは画像の投稿ができないということに気付きました。
仕方がない(Hubotで呼び出すpythonスクリプトで画像を投稿するためにAPIKeyなどを書きたくないと考えた)ので、他の手段を用いて一旦めそ子画像のみbotアカウントで投稿した画像URLを投稿に織り込む方針としました。
画像の件はクリアできそうだと判断したのですが、次なる壁が待っていました。
1〜3の処理について、random関数のみでは確率の調整まではできないらしく(できるけど見つけられていない?)、現時点ではまだ適切な代替手段を見つけられず煮詰まってしまたのです。
仕方がないので、大幅に方針転換をすることにしました。
私はほぼ毎日1枚以上iPhoneで写真を撮影しては各種SNSへ投稿していますので、前回と前々回でご紹介したコードを組み合わせて、写真を撮影するたびにおみくじの結果をこっそり片隅へ表示してしまうことにしました。
# -*- coding: utf-8 -*- from PIL import Image from PIL import ImageDraw import photos import random uranai = ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png', '7.png', '8.png', '9.png', '10.png'] unsei = (random.choice(uranai)) img1 = photos.capture_image() img1.convert('RGBA') drawbuffer = ImageDraw.Draw(img1) mesoko = Image.open(unsei, 'r') img1.paste(mesoko, (2550, 2600), mesoko.split()[3]) crop_img = img1.crop((0, 0, 3024, 3024)) crop_img.show() saveimg = photos.save_image(crop_img) if saveimg is True: print ("saved")
7行目で用意した運勢を8行目のrandom.choiceによってひとつ選びます。
10行目から12行目ではphots.capture_imageによってiOS端末のカメラを起動、写真撮影を行っています。
14,15行目では撮影した画像の上に運勢を表す画像を重ね合わせています。
17行目で合成された画像を正方形に切り取っています(私は主にinstagramへ投稿することが多いからという理由です)。
19行目以降で最終的な画像を保存、端末上に表示させて終了しています。
これで冒頭の写真のように撮影のたびにこっそりとめそ子さんに運勢を占ってもらうことができるようになりました。
今後はHubotに占ってもらう方法の他、今までとは違った視点でのPythonista3の楽しみ方を探してご紹介したいと思います。
Pythonista Advent Calendar 2017にも参加してみようかな?